home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Spanish Scene 1
/
SpanishScene1.iso
/
spanish pack n°1 by llfb
/
--llfb--
/
programas
/
sources1.dms
/
sources1.adf
/
SOURCES
/
Vectores
/
RayVector.ASM
< prev
next >
Wrap
Assembly Source File
|
1996-06-04
|
13KB
|
417 lines
;RAYTRACING FILL2 BY LADO OF FI-RE CREW IN 1992 !
; org $25000
; load $25000
Section Roman,code_c
; >extern 'DF0:raytr.dat',sinus
j lea $30000,a0 ;memoria torlese
lo clr.l (a0)+
cmp.l #$70000,a0
bcs lo
lea $dff000,a6 ;custom
ujn move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$130,d0
bne ujn
move.w #$7fff,$96(a6) ;clear DMACON
move.w #$7fff,$9a(a6) ;clear INTENA
move.l #copper,$84(a6)
clr.w $8a(a6) ;start copper
move.w #$87d0,$96(a6) ;DMACON
move.w #$c010,$9a(a6)
h1 bsr wait ;waitblitter
h2 move.l 4(a6),d0
lsr.l #8,d0
cmp.w #$d0,d0
bne h2
bsr filler
btst #6,$bfe001
bne h1
bsr wait
move.w #$7fff,$96(a6)
move.w #$7fff,$9a(a6)
clr.w $88(a6) ;start original copper
move.w #$87f0,$96(a6)
move.w #$e02c,$9a(a6)
clr.l d0
rts ;END
filler clr.l nagyx
move.l #$7fff7fff,kisx
add.w #2,addx ;xszog novelese
and.w #$1ff,addx
add.w #4,addy ;yszog novelese
and.w #$1ff,addy
add.w #6,addz ;zszog novelese
and.w #$1ff,addz
lea coords(pc),a0 ;kocka pontjainak x,y,z koordinatai
lea sinus(pc),a1 ;sinus ertekek
lea $80(a1),a3 ;cosinus ertekek
lea tarolo(pc),a2 ;2D x,y letarolasa
lea addx(pc),a4 ;szogek
moveq #13,d7 ;8 pont van /kocka/
h3 movem.w (a0)+,d0/d1/d6 ;x,y,z
move.w 4(a4),d5 ;Zszog
bsr calcul ;Z-rotation
move.w d0,d6 ;X tarolasa
move.w d3,d0 ;Y
move.w (a4),d5 ;Xszog
bsr calcul ;X-rotation
move.w d0,d6 ;uj Y tarolasa
move.w d3,d0 ;Z
move.w 2(a4),d5 ;Yszog
bsr calcul ;Y-rotation
exg d0,d3 ;X csere Z-vel Z=d3
moveq #11,d6 ;lekepezes 2D-re
move.w #$3b0,d2
sub.w d3,d2 ;$444-Z
muls d2,d0 ;z'*x
asr.l d6,d0 ;z'*x/2048=2D X
muls d2,d1 ;z'*y
asr.l d6,d1 ;z'*y/2048=2D Y
add.w #150,d0 ;X=X+150 kozepre a kepernyon
add.w #100,d1 ;Y=Y+100
move.w d0,(a2)+ ;2D X tarolasa
move.w d1,(a2)+ ;2D Y tarolasa
cmp.w kisx(pc),d0
bge th1
move.w d0,kisx ;a legkisebb x tarolasa
th1 cmp.w nagyx(pc),d0
ble th2
move.w d0,nagyx ;a legnagyobb x tarolasa
th2 cmp.w kisy(pc),d1
bge th3
move.w d1,kisy ;a legkisebb y tarolasa
th3 cmp.w nagyy(pc),d1
ble th4
move.w d1,nagyy ;a legnagyobb y tarolasa
th4 dbf d7,h3
move.l #$ffff8000,$72(a6) ;vonalhuzashoz standard ertekek
move.l #$ffffffff,$44(a6)
move.w #160,$60(a6) ;kepernyo szelessege
eor.w #$8000,erno+2 ;kepernyo csere
eor.w #$8000,copscr ;csere a copperben is
eor.w #$8000,copscr+4
eor.w #$8000,copscr+8
eor.w #$8000,copscr+12
bsr calsize
movem.l d4/d7/a0,-(a7)
bsr wait ;waitblitter
move.w d4,$66(a6) ;clrscr
move.l #$01000002,$40(a6)
move.l a0,$54(a6)
move.w d7,$58(a6)
lea tarolo(pc),a1 ;2D x,y ertekek
lea meghat(pc),a2 ;structure
lea sinus+$400(pc),a3 ;sor kezdopontja /0-f/ + $a4a or $b4a
lea sinus+$680(pc),a5 ;szelesseg/2/ es vonal hossz values
move.w (a2)+,lap ;lapok szama /6/
h7 move.l (a2)+,d7 ;hany pontot kosson ossze
move.l (a2)+,a4 ;oszzekotesi sorrend
move.l (a2)+,scr ;melyik kepernyore
move.l (a2)+,col ;mutato a szinpalettara,melyik szin a copp.
move.l erno(pc),a0 ;ide rajzol
movem.w (a4),d0/d1/d2 ;lathatosag eldontese
move.w (a1,d1.w),d3 ;x1
sub.w (a1,d0.w),d3 ;X1-X0
move.w 2(a1,d2.w),d4 ;y2
sub.w 2(a1,d1.w),d4 ;Y2-Y1
move.w 2(a1,d1.w),d5 ;y1
sub.w 2(a1,d0.w),d5 ;Y1-Y0
move.w (a1,d2.w),d6 ;x2
sub.w (a1,d1.w),d6 ;X2-X1
mulu d4,d3 ;(y2-y1)(x1-x0)=d3
mulu d6,d5 ;(y1-y0)(x2-x1)=d5
sub.w d5,d3
bmi vakon ;nem latszik
moveq #9,d5 ;512
lsr.w d5,d3 ;d3=d3/512
and.l #$f,d3 ;also 4 bit levalasztasa
add.w d3,d3 ;word
movem.l a0/a1,-(a7)
lea colors(pc),a0 ;szinek
lea copcol(pc),a1 ;copperben a szinek
add.w col(pc),a0 ;uj szin
add.w col+2(pc),a1 ;melyik szin a copperban
move.w (a0,d3.w),d3 ;uj szin bekerese
move.w d3,(a1)
movem.l (a7)+,a0/a1
move.w (a4)+,d5 ;1.pont
move.w (a1,d5.w),d0 ;x1 koordinata
move.w 2(a1,d5.w),d1 ;y1 koordinata
bsr lines ;vonalhuzo
vakon subq.w #1,lap ;lapszam csokkentes
bne h7 ;van meg ?
movem.l (a7)+,d4/d7/a0
bsr wait ;uzemmodban dolgozik
move.l #$09f00012,$40(a6)
move.w d4,$64(a6)
move.w d4,$66(a6)
move.l a0,$50(a6)
move.l a0,$54(a6)
move.w d7,$58(a6) ;feltolt
rts
lines move.w (a4)+,d5 ;kovetkezo pont
move.w (a1,d5.w),d2 ;x2
move.w 2(a1,d5.w),d3 ;y2
movem.w d2/d3,-(a7) ;kovetkezo pont latarolasa
cmp.w d1,d3 ;y2-y1
bgt p1
exg d0,d2 ;kisebb --> coords csere
exg d1,d3 ;mindig a nagyobb y-bol kell huzni !
beq not
p1 move.w #160,d5 ;kepernyo szelessege
move.w d1,d4 ;nagyobb y
mulu d5,d4 ;120*y = pont sora
move.w d0,d5 ;x0
add.l a0,d4 ;$30000+x0 = pont oszlopa
lsr.w #3,d5 ;pont sora/8
add.w d5,d4 ;megkapja a pont helyet
moveq #0,d5
sub.w d1,d3 ;Y
sub.w d0,d2 ;X /x1-x2/
bpl p2
moveq #1,d5 ;x2 kisebb volt,a kapott X negativ
neg.w d2 ;most mar pozitiv X
p2 move.w d3,d1 ;Y
add.w d1,d1 ;2Y
cmp.w d2,d1 ;X-2Y
dbhi d3,p3 ;csokkenti Y-t ha
p3 move.w d3,d1 ;Y
sub.w d2,d1 ;Y-X
bpl p4
exg d2,d3 ;X csereje Y-al
p4 addx.w d5,d5
add.w d2,d2 ;2Y
move.w d2,d1 ;2Y
sub.w d3,d2 ;2Y-X
addx.w d5,d5
add.w d0,d0
move.w d2,d6
sub.w d3,d6
add.w d3,d3
ok move.w (a5,d3.w),d3 ;$58
move.w (a3,d0.w),d0 ;$40
move.b dat(pc,d5.w),d5 ;melyik siknyolcad
bsr okvonal ;vonalrajz
not movem.w (a7)+,d0/d1
dbf d7,lines
rts
dat dc.l $3431353,$b4b1757 ;siknyolcad
okvonal move.l d7,-(a7)
moveq #3,d7 ;3 lehetoseg
swap d2 ;a d2-ot felhasznalom
move.w scr+2(pc),d2 ;melyik kepernyore
loop lsr.w #1,d2 ;az also 3 bit donti el
bcc noo ;Carry=0 --> nem kell
bsr wait
swap d2 ;eredeti d2
move.w d2,$52(a6) ;2y-x
move.w d0,$40(a6) ;12-15-->sor kezdopontja /0-f/ + a4a
move.b d5,$43(a6) ;siknyolcad
move.l d4,$48(a6) ;vonal kezdocime
move.l d4,$54(a6) ;vonal kezdocime
move.w d1,$62(a6) ;2y
move.w d6,$64(a6) ;2y-2x
move.w d3,$58(a6) ;szelesseg=2 , magassag=vonal hossza
swap d2
noo add.l #$28,d4 ;kovetkezo kepernyo
dbf d7,loop
move.l (a7)+,d7
rts
calcul move.w (a3,d5.w),d4 ;cos ertek
move.w (a1,d5.w),d5 ;sin ertek
move.w d0,d2 ;c1
move.w d1,d3 ;c2
muls d4,d0 ;c1*cos(c0angle)
muls d5,d1 ;c2*sin(c0angle)
muls d4,d3 ;c2*cos(c0angle)
muls d5,d2 ;c1*sin(c0angle)
sub.l d1,d0 ;c1*cos(c0angle)-c2*sin(c0angle)
add.l d2,d3 ;c2*cos(c0angle)+c1*sin(c0angle)
add.l d0,d0
add.l d3,d3
swap d0 ;uj c1
swap d3 ;uj c2
move.w d6,d1
rts
calsize movem.w kisx(pc),d0-d3 ;d0=kisx d1=kisy d2=nagyx d3=nagyy
addq.w #8,d2
addq.w #8,d3
sub.w #48,d0
move.l erno(pc),a0
clr.l d4
clr.l d6
move.w d3,d4 ;nagyy
mulu #$a0,d4 ;modulo*nagyy
add.l d4,a0 ;legnagyobb sor ahol gfx van
move.w #$28,d4 ;next screen
moveq #0,d7
sub.w d1,d3 ;y=nagyy-kisy
mulu #5,d3
move.w d3,d7
lsl.w #6,d7 ;$58(a6) vertical
move.w d2,d6 ;nagyx
lsr.w #3,d6 ;nagyx/8
btst #0,d6
beq paros
addq.w #1,d6
paros add.l d6,a0 ;erno+maxsor+maxoszlop
clr.l d1
sub.w d0,d2 ;x=nagyx-kisx
btst #0,d2
beq par2
addq.w #1,d2
par2 move.w d2,d1 ;x
lsr.w #4,d1 ;x/16
or.w d1,d7 ;$58(a6) horizontal
lsl.w #1,d1
btst #0,d1
beq rtb
addq.w #1,d1
rtb sub.w d1,d4 ;modulo
rts
wait btst #$e,2(a6) ;waitblitter
bne wait
rts
copper dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
dc.w $180,0,$108,$78,$10a,$78,$182
copcol dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0,$190,0,$192,0
dc.w $194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $e0,3,$e4,3,$e8,3,$ec,3,$e2
copscr dc.w 0,$e6,$28,$ea,$50,$ee,$78
dc.w $3001,$fffe,$100,$4200,$180,$ff0,$3101,$fffe,$180,0
dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
dc.w $ffff,$fffe
coords dc.w -100,100,100,100,100,100,100,-100,100,-100,-100,100
dc.w 0,0,170,-100,100,-100,100,100,-100,100,-100,-100
dc.w -100,-100,-100,0,0,-170,-170,0,0,0,170,0,170,0,0,0,-170,0
;******************** $26 a szinek tavolsaga !!!! **************
;0,$1c,$38,$54,$70,$8c,$a8,$c4,$e0,$fc
;1:alap 2:alap+$28 3:alap,alap+$28 4:alap+$50 5:alap,alap+$50
;6:alap+$28,alap+$50 7:alap,alap+$28,alap+$50
meghat dc.w 24
dc.l 2,kot1,1,$00380000 ;$182 cyan
dc.l 2,kot2,2,$00380004 ;$184 sarga
dc.l 2,kot3,3,$00380008 ;$186 lila
dc.l 2,kot4,4,$0038000c ;$188 sarga
dc.l 2,kot5,1,$00540000 ;$182 lila
dc.l 2,kot6,2,$00540004 ;$184 cyan
dc.l 2,kot7,3,$00540008 ;$186
dc.l 2,kot8,4,$0054000c ;$188
dc.l 2,kot9,5,$00a80010 ;$18a
dc.l 2,kot10,6,$00a80014 ;$18c
dc.l 2,kot11,7,$00a80018 ;$18e
dc.l 2,kot12,8,$00a8001c ;$190
dc.l 2,kot13,7,$00c40018 ;$18e
dc.l 2,kot14,8,$00c4001c ;$190
dc.l 2,kot15,5,$00c40010 ;$18a
dc.l 2,kot16,6,$00c40014 ;$18c
dc.l 2,kot17,9,$00e00020 ;$192
dc.l 2,kot18,10,$00e00024 ;$194
dc.l 2,kot19,11,$00e00028 ;$196
dc.l 2,kot20,12,$00e0002c ;$198
dc.l 2,kot21,11,$00fc0028 ;$196
dc.l 2,kot22,10,$00fc0024 ;$194
dc.l 2,kot23,9,$00fc0020 ;$192
dc.l 2,kot24,12,$00fc002c ;$198
kot1 dc.w 0,4,16,0
kot2 dc.w 4,8,16,4
kot3 dc.w 8,12,16,8
kot4 dc.w 12,0,16,12
kot5 dc.w 32,28,36,32
kot6 dc.w 20,32,36,20
kot7 dc.w 24,20,36,24
kot8 dc.w 28,24,36,28
kot9 dc.w 4,24,48,4
kot10 dc.w 24,28,48,24
kot11 dc.w 28,8,48,28
kot12 dc.w 8,4,48,8
kot13 dc.w 20,0,40,20
kot14 dc.w 32,20,40,32
kot15 dc.w 12,32,40,12
kot16 dc.w 0,12,40,0
kot17 dc.w 4,0,44,4
kot18 dc.w 0,20,44,0
kot19 dc.w 20,24,44,20
kot20 dc.w 24,4,44,24
kot21 dc.w 12,8,52,12
kot22 dc.w 8,28,52,8
kot23 dc.w 28,32,52,28
kot24 dc.w 32,12,52,32
; kek
colors dc.w 2,3,4,5,6,7,8,9,10,11,12,13,14,15
; piros
dc.w $200,$300,$400,$500,$600,$700,$800,$900,$a00,$b00
dc.w $c00,$d00,$e00,$f00
; zold
dc.w $20,$30,$40,$50,$60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
; sarga
dc.w $220,$330,$440,$550,$660,$770,$880,$990,$aa0,$bb0,$cc0
dc.w $dd0,$ee0,$ff0
; lila
dc.w $202,$303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
dc.w $d0d,$e0e,$f0f
; cyan
dc.w $22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
; feher
dc.w $222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc,$ddd
dc.w $eee,$fff
; aranysarga
dc.w $200,$310,$420,$530,$640,$750,$860,$970,$a80,$b90,$ca0,$db0
dc.w $ec0,$fd0
; barna
dc.w $200,$310,$420,$531,$642,$753,$864,$975,$a86,$b97,$ca8,$db9
dc.w $eca,$fdb
; pritamin zold
dc.w $20,$130,$240,$350,$460,$570,$680,$790,$8a0,$9b0,$ac0,$bd0
dc.w $ce0,$df0
addx dc.w 0 ;xangle
addy dc.w 0 ;yangle
addz dc.w 0 ;zangle
lap dc.w 0 ;siklapok szama/object
scr dc.l 0 ;kepernyo
col dc.l 0 ;color , coppercolor
kisx dc.w 0
kisy dc.w 0
nagyx dc.w 0
nagyy dc.w 0
erno dc.l $38000 ;kepernyo
sinus incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
tarolo blk.b 100,0